import winston from 'winston';
const { combine, timestamp, errors, json, simple, colorize, printf } = winston.format;


// 定义日志级别，数字越小优先级越高
const levels = {
    error: 0,    // 错误信息
    warn: 1,     // 警告信息
    info: 2,     // 一般信息
    http: 3,     // HTTP请求日志
    debug: 4,    // 调试信息
};

const level = () => {
    const env = process.env.NODE_ENV || 'development';
    const isDevelopment = env === 'development';
    return isDevelopment ? 'debug' : 'info';
}


// 自定义日志格式
const customFormat = winston.format.printf(({ level, message, timestamp, stack }) => {
    return `${timestamp} [${level}]: ${stack || message}`;
});

const format = combine(
    timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    process.env.NODE_ENV === 'production' ? json() : customFormat
)


const transports = [

    // 错误日志文件（仅记录error级别）
    new winston.transports.File({
        filename: 'logs/error.log',
        level: 'error',
        maxsize: 5242880, // 5MB
    }),

    // 所有日志文件（记录所有级别）
    new winston.transports.File({
        filename: 'logs/all.log',
        maxsize: 5242880,
    }),
]


const logger = winston.createLogger({
    level: level(),
    levels,
    format,
    transports,
    defaultMeta: {
        service: 'express-serve'
    }
})

// 开发环境添加控制台输出
logger.add(
    new winston.transports.Console({
        format: combine(
            colorize({ all: true }),
            timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
            simple()
        ),
    }),
);


export default logger;
